﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace List泛型
{
    class Program
    {
        static void Main(string[] args)
        {
            ListDemo demo = new ListDemo();
            demo.Demo1<string>("qiaoansheng");
            demo.Demo1<int>(123);
            ///泛型  数据类型延迟声明
            ///普通的方法都要先声明一个 类型 在声明该方法的名字 在给这个方法传递参数
            ///public string(类型) str(变量名字)(string str)
            ///而泛型把声明类型这一个步骤放到最后了
            ///public List<T> ListDemo(T temp)
            ///
            ///泛型在编译的时候把类型编译成一个占位符
            ///程序运行的时候，JIT(即时编译)会把他替换成一个真实的类型
            ///

            ///为什么要用泛型
            ///我们有相同的逻辑，但是某些类型不同，我们希望我们的代码能够重用起来。
            ///为什么不用object
            ///     1.性能不如泛型（拆箱装箱）
            ///     2.类型安全
            ///     
            /// 
            ///泛型一共只有四个地方可以用
            ///     1.泛型方法
            ///     2.泛型类
            ///     3.泛型接口
            ///     4.泛型委托
            ///
            /// 
            /// 
            /// 逆变（contravariant）与协变（covariant）是C#4新增的概念
            /// 
            /// 
            ///

            Console.ReadLine();
        }
    }
}
